package com.fy56.platform.logistics.restful.api.utils.weChat;

import com.fy56.platform.logistics.restful.api.utils.StringToConversionUtil;

import java.util.HashMap;
import java.util.Map;

/**
 * 【接入工具类】微信-枚举
 */
public class WeChatEnum {
	/**
	 * [微信卡卷]卡卷类型
	 */
	public enum CardType {
		/**
		 * 团购券
		 * @param deal_detail (必填)[团购券专用]团购详情
		 */
		GROUPON("groupon"),
		/**
		 * 代金券
		 * @param1 least_cost (必填)[代金券专用]起用金额<单位为分>,如果无起用门槛则填0
		 * @param2 reduce_cost (必填)[代金券专用]表示减免金额<单位为分>
		 */
		CASH("cash"),
		/**
		 * 折扣券
		 * @param discount (必填)[折扣券专用]表示打折额度<百分比>,填30就是七折
		 */
		DISCOUNT("discount"),
		/**
		 * 礼品券
		 * @param gift (必填)[礼品券专用]填写礼品的名称
		 */
		GIFT("gift"),
		/**
		 * 优惠券
		 * @param default_detail (必填)[优惠券专用]填写优惠详情
		 */
		GENERAL_COUPON("general_coupon");
		
		private String key;
		public String getKey() {
			return key;
		}
		public void setKey(String key) {
			this.key = key;
		}

		private CardType(String key) {
			this.key = key;
		}
		
		public Map<String, Object> getAddMap(Map<String, Object> base_info, Object[] args){
			Map<String, Object> map = new HashMap<>();
			map.put("card_type", this.name());//(必填)卡卷类型 
			
			Map<String, Object> bi = new HashMap<>();
			bi.put("base_info", base_info);
			if(GROUPON.ordinal()==this.ordinal()){
				bi.put("deal_detail", args[0]);//(必填)[团购券专用]团购详情
			}else if(CASH.ordinal()==this.ordinal()){
				bi.put("least_cost", args[0]);//(必填)[代金券专用]起用金额<单位为分>,如果无起用门槛则填0
				bi.put("reduce_cost", args[1]);//(必填)[代金券专用]表示减免金额<单位为分>
			}else if(DISCOUNT.ordinal()==this.ordinal()){
				bi.put("discount", args[0]);//(必填)[折扣券专用]表示打折额度<百分比>,填30就是七折
			}else if(GIFT.ordinal()==this.ordinal()){
				bi.put("gift", args[0]);//(必填)[礼品券专用]填写礼品的名称
			}else if(GENERAL_COUPON.ordinal()==this.ordinal()){
				bi.put("default_detail", args[0]);//(必填)[优惠券专用]填写优惠详情
			}
			map.put(this.getKey(), bi);//(必填)卡券基础信息
			return map;
		}
		
		public Map<String, Object> getUpdMap(Map<String, Object> base_info){
			Map<String, Object> map = new HashMap<>();
			map.put("base_info", base_info);//(必填)卡券基础信息
			return map;
		}
	}

	/*-----------------------------------------------------------------------------------*/
	
	/**
	 * [微信卡卷]Code展示类型
	 */
	public enum CodeType {
		/**
		 * 文本
		 */
		CODE_TYPE_TEXT,
		/**
		 * 一维码
		 */
		CODE_TYPE_BARCODE,
		/**
		 * 二维码
		 */
		CODE_TYPE_QRCODE,
		/**
		 * 二维码无code显
		 */
		CODE_TYPE_ONLY_QRCODE,
		/**
		 * 一维码无code显示
		 */
		CODE_TYPE_ONLY_BARCODE,
		/**
		 * 不显示code和条形码类型<须开发者传入"立即使用"自定义cell完成线上券核销>
		 */
		CODE_TYPE_NONE;
	}
	
	/*-----------------------------------------------------------------------------------*/

	/**
	 * [微信卡卷]卡卷颜色 
	 */
	public enum ColorType {
		Color010("#63b359"),
		Color020("#2c9f67"), 
		Color030("#509fc9"),
		Color040("#5885cf"),
		Color050("#9062c0"),
		Color060("#d09a45"),
		Color070("#e4b138"),
		Color080("#ee903c"),
		Color081("#f08500"),
		Color082("#a9d92d"),
		Color090("#dd6549"),
		Color100("#cc463d"),
		Color101("#cf3e36"),
		Color102("#5E6671");
		
		private String key;
		public String getKey() {
			return key;
		}
		public void setKey(String key) {
			this.key = key;
		}

		private ColorType(String key) {
			this.key = key;
		}

	}
	
	/*-----------------------------------------------------------------------------------*/
	
	/**
	 * [微信卡卷]使用日期_类型
	 */
	public enum DateInfo_Type {
		/**
		 * 固定日期区间
		 * @param1 begin_timestamp (必填)起用时间<单位:从1970-1-1 00:00:00至起用时间的秒数>
		 * @param2 end_timestamp (必填)过期时间<单位:从1970-1-1 00:00:00至起用时间的秒数>
		 */
		DATE_TYPE_FIX_TIME_RANGE("begin_timestamp,end_timestamp"),
		/**
		 * 固定时长（自领取后按天算)
		 * @param1 fixed_term (必填)自领取后多少天内有效,不支持填写0<单位:天>
		 * @param2 fixed_begin_term (必填)自领取后多少天开始生效,领取后当天生效填写0<单位:天>
		 * @param3 end_timestamp (选填)过期时间<单位:从1970-1-1 00:00:00至起用时间的秒数>
		 */
		DATE_TYPE_FIX_TERM("fixed_term,fixed_begin_term,end_timestamp");
		
		private String key;
		
		public String getKey() {
			return key;
		}
		
		public void setKey(String key) {
			this.key = key;
		}

		private DateInfo_Type(String key){
			this.key = key;
		}
		
		public Map<String, Object> getMap(Object[] args) {
			Map<String, Object> map = new HashMap<>();
			map.put("type", this.name());
			Object[] keyList = StringToConversionUtil.stringToList(key, ",").toArray();
			for(int i=0; i<args.length; i++){
				map.put(keyList[i].toString(), args[i]);
			}
			return map;
		}
	}
	
	/*-----------------------------------------------------------------------------------*/
	
	/**
	 * [微信卡卷]批量查询_卡券列表_状态
	 */
	public enum Batchget_Status {
		/**
		 * 待审核
		 */
		CARD_STATUS_NOT_VERIFY,
		/**
		 * 审核失败
		 */
		CARD_STATUS_VERIFY_FAIL,
		/**
		 * 通过审核
		 */
		CARD_STATUS_VERIFY_OK,
		/**
		 * 卡券被商户删除
		 */
		CARD_STATUS_DELETE,
		/**
		 * 在公众平台投放过的卡券
		 */
		CARD_STATUS_DISPATCH;
	}
	
	/*-----------------------------------------------------------------------------------*/
	/*-----------------------------------------------------------------------------------*/
	/*-----------------------------------------------------------------------------------*/
	
	/**
	 * [微信-小程序]客服消息_消息类型
	 */
	public enum CustomerServiceMessage_MsgType {
		/**
		 * 文本消息
		 * @param1 (必填)openid
		 * @param2 (必填)content 消息内容
		 */
		TEXT("text"),
		/**
		 * 图片消息
		 * @param1 (必填)openid
		 * @param2 (必填)media_id 发送的图片的媒体ID,微信-上传图片文件获得
		 */
		IMAGE("image"),
		/**
		 * 图文链接
		 * @param1 (必填)openid
		 * @param2 (必填)title 消息标题
		 * @param3 (必填)description 消息内容
		 * @param4 (必填)url 图文链接消息被点击后跳转的链接
		 * @param5 (必填)thumb_url 图文链接消息的图片链接,支持 JPG、PNG 格式,建议大图(640*320),小图(80*80)
		 */
		LINK("link"),
		/**
		 * 小程序卡片
		 * @param1 (必填)openid
		 * @param2 (必填)title 消息标题
		 * @param3 (必填)pagepath 小程序的页面路径,跟app.json对齐,支持参数,比如pages/index/index?foo=bar
		 * @param4 (必填)thumb_media_id 小程序消息卡片的封面,image类型的 media_id,通过 新增素材接口 上传图片文件获得,建议大小为(520*416)
		 */
		MINIPROGRAMPAGE("miniprogrampage");
		
		private String key;
		public String getKey() {
			return key;
		}
		public void setKey(String key) {
			this.key = key;
		}

		private CustomerServiceMessage_MsgType(String key) {
			this.key = key;
		}
		
		public Map<String, Object> getMap(Object[] args) {
			Map<String, Object> map = new HashMap<>();
			map.put("touser", args[0]);
			map.put("msgtype", this.getKey());
			Map<String, Object> val = new HashMap<>();
			if(TEXT.ordinal()==this.ordinal()){
				val.put("content", args[1]);
			}else if(IMAGE.ordinal()==this.ordinal()){
				val.put("media_id", args[1]);
			}else if(LINK.ordinal()==this.ordinal()){
				val.put("title", args[1]);
				val.put("description", args[2]);
				val.put("url", args[3]);
				val.put("thumb_url", args[4]);
			}else if(MINIPROGRAMPAGE.ordinal()==this.ordinal()){
				val.put("title", args[1]);
				val.put("pagepath", args[2]);
				val.put("thumb_media_id", args[3]);
			}
			map.put(this.key, val);
			return map;
		}
	}

	/*-----------------------------------------------------------------------------------*/

	/**
	 * [微信-小程序]订阅消息_跳转小程序类型
	 */
	public enum SubscribeMessage_MiniprogramState {
		/**
		 * 开发版
		 */
		DEVELOPER("developer"),
		/**
		 * 体验版
		 */
		TRIAL("trial"),
		/**
		 * 正式版
		 */
		FORMAL("formal");

		private String key;
		public String getKey() {
			return key;
		}
		public void setKey(String key) {
			this.key = key;
		}

		private SubscribeMessage_MiniprogramState(String key) {
			this.key = key;
		}
	}

	/*-----------------------------------------------------------------------------------*/

	/**
	 * [微信-小程序]订阅消息_跳转小程序类型
	 */
	public enum SubscribeMessage_Lang {
		/**
		 * 简体中文(zh_CN)
		 */
		zh_CN,
		/**
		 * 英文
		 */
		en_US,
		/**
		 * 繁体中文(zh_HK)
		 */
		zh_HK,
		/**
		 * 繁体中文(zh_TW)
		 */
		zh_TW;
	}
}
